home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 2 / The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO / prog / pistol.zip / CABORT.ASM next >
Assembly Source File  |  1987-08-20  |  2KB  |  61 lines

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ; JAN 2, 1982    user level abort() for BCS C, vers 1.44          ;
  3. ; uses MAC with CMAC.LIB and BDS.LIB, suitable for 8080       ;
  4. ; by Ernest E. Bergmann                          ;
  5. ;    Physics, Building #16                      ;
  6. ;    Lehigh University                          ;
  7. ;    Bethlehem, Pa. 18015                      ;
  8. ;                                  ;
  9. ;    To use:    initialize in main():    abort(); /* =0 */     ;
  10. ;                    next: ...          ;
  11. ;        subsequently, at                  ;
  12. ;        any level:        abort(); /* #0 */     ;
  13. ;    will cause program flow back to                  ;
  14. ;    main() at location "next:"                  ;
  15. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  16.  
  17.     maclib    bds
  18.     maclib    cmac
  19.  
  20.     direct
  21.     define    abort
  22.     enddir
  23.  
  24.     prelude    abort
  25.  
  26.     reloc lhld,spsave    ; first time: (spsave)=0
  27.     mov    a,h        ; is it first time?
  28.     ora    l
  29.     reloc jz,initab        ; if so, initialize
  30.     xchg            ; save (spsave) in de
  31.     reloc lhld,bcsave    ; restore original bc
  32.     mov    b,h
  33.     mov    c,l
  34.     reloc lhld,pcsave    ; restore original ret addr
  35.     xchg            ; (spsave) back to hl
  36.     sphl            ; old sp restored
  37.     push    d        ; restoring original ret addr
  38.     ret            ; abort() <> 0 for
  39.                 ; subsequent calls
  40.  
  41. initab    pop    d    ; here if first time called
  42.     dad    sp    ; initializes spsave,pcsave,bcsave
  43.     reloc shld,spsave
  44.     xchg
  45.     reloc shld,pcsave
  46.     push    h
  47.     mov    l,c
  48.     mov    h,b
  49.     reloc shld,bcsave
  50.     lxi    h,0    ; return abort() = 0
  51.     ret        ; for initial call
  52.  
  53. bcsave    dw    0
  54. pcsave    dw    0
  55. spsave    dw    0
  56.  
  57.     postlude abort
  58.  
  59.     end
  60. ubsequently, at                  ;
  61. ;        any level:        abort(); /* #0 */     ;